# 指定 Shell 解释器
SHELL := /bin/bash

DOCKER_DIR := docker                           # Docker 配置目录
JAR_PATH := deploy/*.jar                       # Maven 打包路径

# 定义执行命令
MVN_CMD := mvn -B -q clean package -f pom.xml  # 强制批量模式，显示错误详情
COPY_CMD := cd $(DOCKER_DIR) && sh ./copy.sh      # 将打包的 jar 包拷贝到 dockerfile 的可使用目录下
DEPLOY_CMD := cd $(DOCKER_DIR) && sh ./deploy.sh  # 脚本 docker 部署
ENV_CMD := ./buildEnv.sh $(DOCKER_DIR)            # 指定环境变量
# 定义VERSION变量
VERSION = $(shell git describe --tags --always --dirty)
# 定义BUILD_TIME变量
BUILD_TIME = $(shell date +'%Y-%m-%d %H:%M:%S')

# 默认任务链
all: build copy deploy clean

# 构建阶段
build:
	@echo -e "\n\033[1;34m=== [$(BUILD_TIME)] 版本: $(VERSION) 开始 Maven 构建 ===\033[0m"
	$(MVN_CMD)
	@JAR_FILE=$$(ls ${JAR_PATH} 2>/dev/null); \
	if [ -n "$$JAR_FILE" ]; then \
		echo -e "\033[1;32m[$(BUILD_TIME)] 版本: $(VERSION) 构建成功，生成文件: $$JAR_FILE\033[0m"; \
	else \
		echo -e "\033[1;31m[$(BUILD_TIME)] 版本: $(VERSION) 错误：未找到构建产物，请检查编译错误！\033[0m"; \
		exit 1; \
	fi

# 文件复制
copy:
	@echo -e "\n\033[1;34m=== [$(BUILD_TIME)] 版本: $(VERSION) 复制构建产物到 Docker 目录 ===\033[0m"
	@if [ -d $(DOCKER_DIR) ]; then \
		$(COPY_CMD); \
		echo -e "\033[1;32m[$(BUILD_TIME)] 版本: $(VERSION) 文件复制完成，目标目录: $(DOCKER_DIR)\033[0m"; \
	else \
		echo -e "\033[1;31m[$(BUILD_TIME)] 版本: $(VERSION) 错误：Docker 目录不存在，请检查路径！\033[0m"; \
		exit 1; \
	fi

# 环境配置
env:
	@echo -e "\n\033[1;34m=== [$(BUILD_TIME)] 版本: $(VERSION) 加载环境变量配置 ===\033[0m"
	@$(ENV_CMD) && echo -e "\033[1;32m[$(BUILD_TIME)] 版本: $(VERSION) 环境变量加载成功\033[0m" || (echo -e "\033[1;31m[$(BUILD_TIME)] 版本: $(VERSION) 错误：环境配置失败！\033[0m"; exit 1)

# 部署流程
deploy: env
	@echo -e "\n\033[1;34m=== [$(BUILD_TIME)] 版本: $(VERSION) 启动 Docker 服务 ===\033[0m"
	@$(DEPLOY_CMD) && echo -e "\033[1;32m[$(BUILD_TIME)] 版本: $(VERSION) Docker 服务启动成功\033[0m" || (echo -e "\033[1;31m[$(BUILD_TIME)] 版本: $(VERSION) 错误：Docker 部署失败！\033[0m"; exit 1)

# 清理环境
clean:
	@echo -e "\n\033[1;34m=== [$(BUILD_TIME)] 版本: $(VERSION) 清理构建产物 ===\033[0m"
	@mvn -q clean
	@find $(DOCKER_DIR) -type f -name "*.jar" -delete
	@rm -f $(JAR_PATH)
	@echo -e "\033[1;32m[$(BUILD_TIME)] 版本: $(VERSION) 清理完成\033[0m"

